package br.com.sgs.persist;

import br.com.sgs.basic.GenericDAO;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 *
 * @author MaUrO FiLhO
 */
@Entity
@javax.persistence.SequenceGenerator(name="pessoa_juridica_id_p_juridica_seq", sequenceName="pessoa_juridica_id_p_juridica_seq")
@Table(name = "pessoa_juridica")
@Inheritance(strategy=InheritanceType.JOINED)
@NamedQueries({
    @NamedQuery(name = "PessoaJuridica.findAll", query = "SELECT p FROM PessoaJuridica p"),
    @NamedQuery(name = "PessoaJuridica.findByIdPJuridica", query = "SELECT p FROM PessoaJuridica p WHERE p.idPJuridica = :idPJuridica"),
    @NamedQuery(name = "PessoaJuridica.findByCnpj", query = "SELECT p FROM PessoaJuridica p WHERE p.cnpj = :cnpj"),
    @NamedQuery(name = "PessoaJuridica.findByInsEstadual", query = "SELECT p FROM PessoaJuridica p WHERE p.insEstadual = :insEstadual"),
    @NamedQuery(name = "PessoaJuridica.findByRazaoSocial", query = "SELECT p FROM PessoaJuridica p WHERE p.razaoSocial = :razaoSocial"),
    @NamedQuery(name = "PessoaJuridica.findByNomeFantasia", query = "SELECT p FROM PessoaJuridica p WHERE p.nomeFantasia = :nomeFantasia"),
    @NamedQuery(name = "PessoaJuridica.findByCep", query = "SELECT p FROM PessoaJuridica p WHERE p.cep = :cep"),
    @NamedQuery(name = "PessoaJuridica.findByBairro", query = "SELECT p FROM PessoaJuridica p WHERE p.bairro = :bairro"),
    @NamedQuery(name = "PessoaJuridica.findByRua", query = "SELECT p FROM PessoaJuridica p WHERE p.rua = :rua"),
    @NamedQuery(name = "PessoaJuridica.findByCidade", query = "SELECT p FROM PessoaJuridica p WHERE p.cidade = :cidade"),
    @NamedQuery(name = "PessoaJuridica.findByUf", query = "SELECT p FROM PessoaJuridica p WHERE p.uf = :uf"),
    @NamedQuery(name = "PessoaJuridica.findByFone", query = "SELECT p FROM PessoaJuridica p WHERE p.fone = :fone"),
    @NamedQuery(name = "PessoaJuridica.findByEmail", query = "SELECT p FROM PessoaJuridica p WHERE p.email = :email")})
public class PessoaJuridica implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator="pessoa_juridica_id_p_juridica_seq")
    @Basic(optional = false)
    @Column(name = "id_p_juridica")
    private Integer idPJuridica;
    @Column(name = "cnpj")
    private String cnpj;
    @Column(name = "ins_estadual")
    private String insEstadual;
    @Basic(optional = false)
    @Column(name = "razao_social")
    private String razaoSocial;
    @Basic(optional = false)
    @Column(name = "nome_fantasia")
    private String nomeFantasia;
    @Column(name = "cep")
    private String cep;
    @Column(name = "bairro")
    private String bairro;
    @Column(name = "rua")
    private String rua;
    @Column(name = "cidade")
    private String cidade;
    @Column(name = "uf")
    private String uf;
    @Column(name = "fone")
    private String fone;
    @Column(name = "email")
    private String email;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "pessoaJuridica")
    private List<UsuarioFornecedor> usuarioFornecedorList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "pessoaJuridica")
    private List<Fornecedor> fornecedorList;

    public PessoaJuridica() {
    }

    public PessoaJuridica(Integer idPJuridica) {
        this.idPJuridica = idPJuridica;
    }

    public PessoaJuridica(Integer idPJuridica, String razaoSocial, String nomeFantasia) {
        this.idPJuridica = idPJuridica;
        this.razaoSocial = razaoSocial;
        this.nomeFantasia = nomeFantasia;
    }

    public Integer getIdPJuridica() {
        return idPJuridica;
    }

    public void setIdPJuridica(Integer idPJuridica) {
        this.idPJuridica = idPJuridica;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getInsEstadual() {
        return insEstadual;
    }

    public void setInsEstadual(String insEstadual) {
        this.insEstadual = insEstadual;
    }

    public String getRazaoSocial() {
        return razaoSocial;
    }

    public void setRazaoSocial(String razaoSocial) {
        this.razaoSocial = razaoSocial;
    }

    public String getNomeFantasia() {
        return nomeFantasia;
    }

    public void setNomeFantasia(String nomeFantasia) {
        this.nomeFantasia = nomeFantasia;
    }

    public String getCep() {
        return cep;
    }

    public void setCep(String cep) {
        this.cep = cep;
    }

    public String getBairro() {
        return bairro;
    }

    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    public String getRua() {
        return rua;
    }

    public void setRua(String rua) {
        this.rua = rua;
    }

    public String getCidade() {
        return cidade;
    }

    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    public String getUf() {
        return uf;
    }

    public void setUf(String uf) {
        this.uf = uf;
    }

    public String getFone() {
        return fone;
    }

    public void setFone(String fone) {
        this.fone = fone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List<UsuarioFornecedor> getUsuarioFornecedorList() {
        return usuarioFornecedorList;
    }

    public void setUsuarioFornecedorList(List<UsuarioFornecedor> usuarioFornecedorList) {
        this.usuarioFornecedorList = usuarioFornecedorList;
    }

    public List<Fornecedor> getFornecedorList() {
        return fornecedorList;
    }

    public void setFornecedorList(List<Fornecedor> fornecedorList) {
        this.fornecedorList = fornecedorList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idPJuridica != null ? idPJuridica.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof PessoaJuridica)) {
            return false;
        }
        PessoaJuridica other = (PessoaJuridica) object;
        if ((this.idPJuridica == null && other.idPJuridica != null) || (this.idPJuridica != null && !this.idPJuridica.equals(other.idPJuridica))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.sgs.persist.PessoaJuridica[idPJuridica=" + idPJuridica + "]";
    }

    public static final String FALHA = "falha";
    public static final String SUCESSO = "sucesso";
    public static final String CANCELAR = "cancelar";

    public String cadastrarPJuridica(PessoaJuridica pjuridica) {
        GenericDAO DAO = new GenericDAO();
        String retorno = FALHA;
          try{

              DAO.inserir(pjuridica);
              retorno = SUCESSO;

           } catch (Exception e) {
              System.out.print("Falha no Bean CadFornecedor: "+e);
              retorno = FALHA;
           }

        return retorno;
    }
    

    public String alterarPJuridica(PessoaJuridica pjuridica) {
        GenericDAO DAO = new GenericDAO();
        String retorno = FALHA;
        try{
        DAO.alterar(pjuridica);
        retorno = SUCESSO;
        }
        catch(Exception e){
        System.out.print("Falha no Bean AlterFornecedor: "+e);
        retorno = FALHA;
        }
        return retorno;
    }

    public String excluirPJuridica(PessoaJuridica pjuridica) {
        GenericDAO DAO = new GenericDAO();
        String retorno = FALHA;
        try{
        DAO.deletar(pjuridica);
        retorno = SUCESSO;
        }
        catch(Exception e){
        System.out.print("Falha no Bean excluPJuridica: "+e);
        retorno = FALHA;
        }
        return retorno;
    }

    public String cancelarPJuridica() {
        return CANCELAR;
    }

}
